package com.demo.boot.desigin.factory;


import com.demo.boot.desigin.factory.enums.ShapeType;

/**
* @author ccubee
* @since 2021-05-12 11:15
*/
public class FactoryPatternDemo {
 
   public static void main(String[] args) {
      ShapeFactory1 shapeFactory = new ShapeFactory1();
 
      //获取 Circle 的对象，并调用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");
 
      //调用 Circle 的 draw 方法
      shape1.draw();
 
      //获取 Rectangle 的对象，并调用它的 draw 方法
      Shape shape2 = shapeFactory.getShape("RECTANGLE");
 
      //调用 Rectangle 的 draw 方法
      shape2.draw();
 
      //获取 Square 的对象，并调用它的 draw 方法
      Shape shape3 = shapeFactory.getShape("SQUARE");
 
      //调用 Square 的 draw 方法
      shape3.draw();



      Rectangle rect = (Rectangle) ShapeFactory.getClass(Rectangle.class);
      rect.draw();
      Square square = (Square) ShapeFactory.getClass(Square.class);
      square.draw();

      Rectangle rect1 = ShapeFactory.getClass1(Rectangle.class);
      rect1.draw();

      Shape square1 = ShapeFactory.getClass1(Square.class);
      square1.draw();


      // jdk9
      Rectangle rect2 = ShapeFactory.getClass2(Rectangle.class);
      rect2.draw();

      Shape square2 = ShapeFactory.getClass2(Square.class);
      square2.draw();


      //枚举类 获取 Circle 的对象，并调用它的 draw 方法
      Shape shapeEn = ShapeFactory.getShape(ShapeType.CIRCLE);

      //调用 Circle 的 draw 方法
      shapeEn.draw();

      //获取 Rectangle 的对象，并调用它的 draw 方法
      Shape shapeEn1 = ShapeFactory.getShape(ShapeType.RECTANGLE);
      ShapeFactory.getShape(ShapeType.RECTANGLE);

      //调用 Rectangle 的 draw 方法
      shapeEn1.draw();

      //获取 Square 的对象，并调用它的 draw 方法
      Shape shapeEn2 = ShapeFactory.getShape(ShapeType.SQUARE);

      //调用 Square 的 draw 方法
      shapeEn2.draw();
   }
}